//
// Created by Tiany on 2021/6/18.
//
//单链表测试程序

#include "LinkList.h"
#include "stdio.h"

static void LinkListTest(void) {
    struct DataType a[] = {10, 15, 4, 45, 561, 47, 85, 46, 32};
    PNode pNode, pNode1;/*定义结点类型*/
    int length = (sizeof(a) / sizeof(a[0]));/*获取数组长度*/
    LinkList linkList = createNullList_link();/*创建空链表*/
    LinkList linkList1;/*用于指向新的单链表*/
    linkList1 = writeList_link(linkList, a, length);/*把数据写入单链表*/
    readList_link(linkList1);/*读取数据并打印*/

    pNode = locate_link(linkList1, a[5]);/*在单链表中查找元素x*/
    printf("\n读取到的数据：%d  原始数据：%d", a[5].n, pNode->info.n);
    insertPost_link(linkList1, pNode, a[1]);/*在结点pNode(a[5].n=47)后插入结点a[1](15)*/
    printf("\n将%d插入%d后：", a[1], pNode->info.n);
    readList_link(linkList1);/*读取数据并打印*/

    pNode1 = locate_link(linkList1, a[3]);/*读取一个结点*/
    insertPre_link(linkList1, pNode1, a[6]);/*在结点pNode1之前插入元素a[6]*/
    printf("\n在结点%d之前插入元素%d:", pNode1->info.n, a[6].n);
    readList_link(linkList1);/*读取数据并打印*/

    deleteV_link(linkList1, a[1]);/*删除元素a[1]（15）对应的结点*/
    printf("\n删除元素%d对应的结点后:", a[1]);
    readList_link(linkList1);/*读取数据并打印*/

    deleteP_link(linkList1, pNode1);
    printf("\n删除元素%d前一个的结点:", pNode1->info.n);
    readList_link(linkList1);
    printf("表长：%d", length_link(linkList1));
    /*练习题目*/
    /*写一算法，删除单链表中相同的多余的结点，即相同的数据仅保留一个*/
    printf("\n*********************************\n");
    struct DataType dataType[] = {10, 156, 1, 1, 2, 15, 54, 1, 15, 11, 315, 1, 4, 51, 6, 2, 21, 4, 1, 2, 11, 48, 49,
                                  164, 651, 1, 3, 13, 21, 64, 5};
    int length1 = (sizeof(dataType) / sizeof(dataType[0]));/*获取数组长度*/
    LinkList linkList2 = createNullList_link();/*创建空链表*/
    linkList2 = writeList_link(linkList2, dataType, length1);/*把数据写入单链表*/
    readList_link(linkList2);/*读取数据并打印*/
    printf("\n总计有%d", countV_link(linkList2, dataType[2]));
    delete_duplicate(linkList2);/*单链表去重*/
    printf("\n去重结果\n");
    readList_link(linkList2);
}
